home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / PatternPanel.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  21KB  |  929 lines

  1. /*
  2. **    PatternPanel.c
  3. **
  4. **    Editing panel for phone number patterns
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. ** :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_LIST,GAD_COMMENT,GAD_PATTERN,
  17.             GAD_TOP,GAD_UP,GAD_DOWN,GAD_END,
  18.             GAD_NEW,GAD_REMOVE,GAD_CLEAR,
  19.             GAD_EDIT,GAD_COPY,
  20.             GAD_LOAD,GAD_SAVE,GAD_USE,GAD_CLOSE,GAD_DISCARD
  21.         };
  22.  
  23. STATIC VOID
  24. ChangeLocalState(LayoutHandle *Handle,struct List *List,struct PatternNode *Node)
  25. {
  26.     BOOL IsFirst,IsLast,IsEmpty,IsInvalid,IsLocked;
  27.     Tag StringTag;
  28.  
  29.     if(IsEmpty = IsListEmpty(List))
  30.         IsFirst = IsLast = IsInvalid = IsLocked = TRUE;
  31.     else
  32.     {
  33.         if(Node)
  34.         {
  35.             IsFirst        = (BOOL)(Node == (struct PatternNode *)List->lh_Head);
  36.             IsLast        = (BOOL)(Node == (struct PatternNode *)List->lh_TailPred);
  37.             IsInvalid    = FALSE;
  38.             IsLocked    = (BOOL)(&Node->List == (struct MinList *)GetActivePattern());
  39.         }
  40.         else
  41.             IsFirst = IsLast = IsInvalid = IsLocked = TRUE;
  42.     }
  43.  
  44.     StringTag = IsInvalid ? GTST_String : TAG_IGNORE;
  45.  
  46.     LT_SetAttributes(Handle,GAD_TOP,
  47.         GA_Disabled,    IsFirst,
  48.     TAG_DONE);
  49.  
  50.     LT_SetAttributes(Handle,GAD_UP,
  51.         GA_Disabled,    IsFirst,
  52.     TAG_DONE);
  53.  
  54.     LT_SetAttributes(Handle,GAD_DOWN,
  55.         GA_Disabled,    IsLast,
  56.     TAG_DONE);
  57.  
  58.     LT_SetAttributes(Handle,GAD_END,
  59.         GA_Disabled,    IsLast,
  60.     TAG_DONE);
  61.  
  62.     LT_SetAttributes(Handle,GAD_SAVE,
  63.         GA_Disabled,    IsEmpty,
  64.     TAG_DONE);
  65.  
  66.     LT_SetAttributes(Handle,GAD_LOAD,
  67.         GA_Disabled,        GetActivePattern() != NULL,
  68.     TAG_DONE);
  69.  
  70.     LT_SetAttributes(Handle,GAD_CLEAR,
  71.         GA_Disabled,    IsEmpty,
  72.     TAG_DONE);
  73.  
  74.     LT_SetAttributes(Handle,GAD_REMOVE,
  75.         GA_Disabled,    IsLocked,
  76.     TAG_DONE);
  77.  
  78.     LT_SetAttributes(Handle,GAD_EDIT,
  79.         GA_Disabled,    IsLocked,
  80.     TAG_DONE);
  81.  
  82.     LT_SetAttributes(Handle,GAD_COPY,
  83.         GA_Disabled,    IsLocked,
  84.     TAG_DONE);
  85.  
  86.     LT_SetAttributes(Handle,GAD_PATTERN,
  87.         GA_Disabled,    IsInvalid,
  88.         StringTag,        "",
  89.     TAG_DONE);
  90.  
  91.     LT_SetAttributes(Handle,GAD_COMMENT,
  92.         GA_Disabled,    IsInvalid,
  93.         StringTag,        "",
  94.     TAG_DONE);
  95. }
  96.  
  97. BOOL
  98. PatternPanelConfig(struct List *PatternList,STRPTR LastPattern,BOOL *ChangedPtr)
  99. {
  100.     STATIC WORD ButtonID[] =
  101.     {
  102.         MSG_FASTMACROPANEL_NEW_GAD,
  103.         MSG_GLOBAL_REMOVE_GAD,
  104.         MSG_UPLOADQUEUE_CLEAR_TXT,
  105.         MSG_V36_0043,
  106.         MSG_COPY_GAD
  107.     };
  108.  
  109.     struct LayoutHandle *Handle;
  110.     struct PatternNode    *Node;
  111.     LONG                 ListCount;
  112.     LONG                 i,Max,Len;
  113.     LONG                 MaxWidth,MaxHeight;
  114.     BOOL                 Changed = FALSE;
  115.  
  116.     ListCount = GetListSize(PatternList);
  117.  
  118.     if(Handle = LT_CreateHandleTags(Window->WScreen,
  119.         LAHN_LocaleHook,    &LocaleHook,
  120.     TAG_DONE))
  121.     {
  122.         struct Window    *LocalWindow;
  123.         struct IBox     Bounds;
  124.  
  125.         for(i = Max = 0 ; i < NUM_ELEMENTS(ButtonID) ; i++)
  126.         {
  127.             if((Len = LT_LabelChars(Handle,LocaleString(ButtonID[i]))) > Max)
  128.                 Max = Len;
  129.         }
  130.  
  131.         LT_New(Handle,
  132.             LA_Type,    VERTICAL_KIND,
  133.         TAG_DONE);
  134.         {
  135.             LT_New(Handle,
  136.                 LA_Type,        VERTICAL_KIND,
  137.                 LA_LabelID,     MSG_AREACODE_GROUPS_TXT,
  138.             TAG_DONE);
  139.             {
  140.                 MaxWidth = MaxHeight = 0;
  141.  
  142.                 if(PatternList)
  143.                 {
  144.                     struct Node *Node;
  145.                     LONG Len;
  146.  
  147.                     for(Node = PatternList->lh_Head ; Node->ln_Succ ; Node = Node->ln_Succ)
  148.                     {
  149.                         Len = strlen(Node->ln_Name);
  150.  
  151.                         if(Len > MaxWidth)
  152.                             MaxWidth = Len;
  153.  
  154.                         MaxHeight++;
  155.                     }
  156.                 }
  157.  
  158.                 if(MaxWidth < 30)
  159.                     MaxWidth = 30;
  160.  
  161.                 if(MaxHeight < 10)
  162.                     MaxHeight = 10;
  163.                 else
  164.                 {
  165.                     if(MaxHeight > 20)
  166.                         MaxHeight = 20;
  167.                 }
  168.  
  169.                 LT_New(Handle,
  170.                     LA_Type,        LISTVIEW_KIND,
  171.                     LA_LabelID,     MSG_AREACODE_GROUPS_GAD,
  172.                     LA_LabelPlace,    PLACE_Left,
  173.                     LA_Chars,        30,
  174.                     LA_ID,            GAD_LIST,
  175.                     LALV_Lines,        10,
  176.                     LALV_CursorKey, TRUE,
  177.                     LALV_ResizeX,    TRUE,
  178.                     LALV_ResizeY,    TRUE,
  179.                     LALV_MaxGrowY,    MaxHeight,
  180.                     LALV_MaxGrowX,    MaxWidth,
  181.                     GTLV_Labels,    PatternList,
  182.  
  183.                     Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  184.                 TAG_DONE);
  185.  
  186.                 LT_New(Handle,
  187.                     LA_Type,        STRING_KIND,
  188.                     LA_LabelID,     MSG_AREACODE_NAME_GAD,
  189.                     LA_ID,            GAD_COMMENT,
  190.                     GTST_MaxChars,    structsizeof(PatternNode,Comment) - 1,
  191.                     GA_Disabled,    TRUE,
  192.                 TAG_DONE);
  193.  
  194.                 LT_New(Handle,
  195.                     LA_Type,        STRING_KIND,
  196.                     LA_LabelID,     MSG_AREACODE_PATTERN_GAD,
  197.                     LA_ID,            GAD_PATTERN,
  198.                     GTST_MaxChars,    structsizeof(PatternNode,Pattern) - 1,
  199.                     GA_Disabled,    TRUE,
  200.                 TAG_DONE);
  201.  
  202.                 LT_EndGroup(Handle);
  203.             }
  204.  
  205.             LT_New(Handle,
  206.                 LA_Type,        HORIZONTAL_KIND,
  207.                 LA_LabelID,     MSG_V36_0038,
  208.                 LAGR_SameSize,    TRUE,
  209.             TAG_DONE);
  210.             {
  211.                 LT_New(Handle,
  212.                     LA_Type,            TAPEDECK_KIND,
  213.                     LATD_ButtonType,    TDBT_Previous,
  214.                     LATD_Smaller,        TRUE,
  215.                     LA_ID,                GAD_TOP,
  216.                     LA_NoKey,            TRUE,
  217.                     GA_Disabled,        TRUE,
  218.                 TAG_DONE);
  219.  
  220.                 LT_New(Handle,
  221.                     LA_Type,            TAPEDECK_KIND,
  222.                     LATD_ButtonType,    TDBT_Rewind,
  223.                     LATD_Smaller,        TRUE,
  224.                     LA_ID,                GAD_UP,
  225.                     LA_NoKey,            TRUE,
  226.                     GA_Disabled,        TRUE,
  227.                 TAG_DONE);
  228.  
  229.                 LT_New(Handle,
  230.                     LA_Type,            TAPEDECK_KIND,
  231.                     LATD_ButtonType,    TDBT_Play,
  232.                     LATD_Smaller,        TRUE,
  233.                     LA_ID,                GAD_DOWN,
  234.                     LA_NoKey,            TRUE,
  235.                     GA_Disabled,        TRUE,
  236.                 TAG_DONE);
  237.  
  238.                 LT_New(Handle,
  239.                     LA_Type,            TAPEDECK_KIND,
  240.                     LATD_ButtonType,    TDBT_Next,
  241.                     LATD_Smaller,        TRUE,
  242.                     LA_ID,                GAD_END,
  243.                     LA_NoKey,            TRUE,
  244.                     GA_Disabled,        TRUE,
  245.                 TAG_DONE);
  246.  
  247.                 LT_EndGroup(Handle);
  248.             }
  249.  
  250.             LT_New(Handle,
  251.                 LA_Type,        HORIZONTAL_KIND,
  252.                 LA_LabelID,     MSG_V36_0043,
  253.                 LAGR_SameSize,    TRUE,
  254.             TAG_DONE);
  255.             {
  256.                 LT_New(Handle,
  257.                     LA_Type,        BUTTON_KIND,
  258.                     LA_LabelID,     MSG_FASTMACROPANEL_NEW_GAD,
  259.                     LA_ID,            GAD_NEW,
  260.                     LA_Chars,        Max,
  261.                 TAG_DONE);
  262.  
  263.                 LT_New(Handle,
  264.                     LA_Type,        BUTTON_KIND,
  265.                     LA_LabelID,     MSG_GLOBAL_REMOVE_GAD,
  266.                     LA_ID,            GAD_REMOVE,
  267.                     GA_Disabled,    TRUE,
  268.                     LA_Chars,        Max,
  269.                 TAG_DONE);
  270.  
  271.                 LT_New(Handle,
  272.                     LA_Type,        BUTTON_KIND,
  273.                     LA_LabelID,     MSG_COPY_GAD,
  274.                     LA_ID,            GAD_COPY,
  275.                     GA_Disabled,    TRUE,
  276.                     LA_Chars,        Max,
  277.                 TAG_DONE);
  278.  
  279.                 LT_New(Handle,
  280.                     LA_Type,        BUTTON_KIND,
  281.                     LA_LabelID,     MSG_UPLOADQUEUE_CLEAR_TXT,
  282.                     LA_ID,            GAD_CLEAR,
  283.                     GA_Disabled,    IsListEmpty(PatternList),
  284.                     LA_Chars,        Max,
  285.                 TAG_DONE);
  286.  
  287.                 LT_New(Handle,
  288.                     LA_Type,        BUTTON_KIND,
  289.                     LA_LabelID,     MSG_V36_0043,
  290.                     LA_ID,            GAD_EDIT,
  291.                     GA_Disabled,    TRUE,
  292.                     LA_Chars,        Max,
  293.                 TAG_DONE);
  294.  
  295.                 LT_EndGroup(Handle);
  296.             }
  297.  
  298.             LT_New(Handle,
  299.                 LA_Type,    VERTICAL_KIND,
  300.             TAG_DONE);
  301.             {
  302.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  303.  
  304.                 LT_EndGroup(Handle);
  305.             }
  306.  
  307.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  308.                 LAGR_SameSize,    TRUE,
  309.                 LAGR_Spread,    TRUE,
  310.                 LA_ExtraSpace,    TRUE,
  311.             TAG_DONE);
  312.             {
  313.                 LT_New(Handle,
  314.                     LA_Type,        BUTTON_KIND,
  315.                     LA_LabelID,     MSG_GLOBAL_USE_GAD,
  316.                     LA_ID,            GAD_USE,
  317.                     LABT_ReturnKey, TRUE,
  318.                     LABT_ExtraFat,    TRUE,
  319.                 TAG_DONE);
  320.  
  321.                 LT_New(Handle,
  322.                     LA_Type,        BUTTON_KIND,
  323.                     LA_LabelID,     MSG_GLOBAL_LOAD_GAD,
  324.                     LA_ID,            GAD_LOAD,
  325.                     GA_Disabled,    GetActivePattern() != NULL,
  326.                 TAG_DONE);
  327.  
  328.                 LT_New(Handle,
  329.                     LA_Type,        BUTTON_KIND,
  330.                     LA_LabelID,     MSG_GLOBAL_SAVE_GAD,
  331.                     LA_ID,            GAD_SAVE,
  332.                     GA_Disabled,    IsListEmpty(PatternList),
  333.                 TAG_DONE);
  334.  
  335.                 LT_New(Handle,
  336.                     LA_Type,        BUTTON_KIND,
  337.                     LA_LabelID,     MSG_DISCARD_GAD,
  338.                     LA_ID,            GAD_DISCARD,
  339.                 TAG_DONE);
  340.  
  341.                 LT_New(Handle,
  342.                     LA_Type,        BUTTON_KIND,
  343.                     LA_LabelID,     MSG_GLOBAL_CLOSE_TXT,
  344.                     LA_ID,            GAD_CLOSE,
  345.                     LABT_EscKey,    TRUE,
  346.                 TAG_DONE);
  347.  
  348.                 LT_EndGroup(Handle);
  349.             }
  350.  
  351.             LT_EndGroup(Handle);
  352.         }
  353.  
  354.         if(Screen && Window)
  355.         {
  356.             Bounds.Left        = Window->LeftEdge;
  357.             Bounds.Top        = Window->TopEdge;
  358.             Bounds.Width    = Window->Width;
  359.             Bounds.Height    = Window->Height;
  360.         }
  361.  
  362.         if(LocalWindow = LT_Build(Handle,
  363.             LAWN_TitleID,        MSG_AREACODE_GROUPS_TITLE,
  364.             LAWN_HelpHook,        &GuideHook,
  365.             LAWN_Parent,        Window,
  366.             WA_DepthGadget,     TRUE,
  367.             WA_DragBar,         TRUE,
  368.             WA_RMBTrap,         TRUE,
  369.             WA_Activate,        TRUE,
  370.             WA_SimpleRefresh,    TRUE,
  371.  
  372.             Screen ? LAWN_Bounds : TAG_IGNORE, &Bounds,
  373.         TAG_DONE))
  374.         {
  375.             struct IntuiMessage     *Message;
  376.             BOOL                      Done = FALSE;
  377.             ULONG                     MsgClass;
  378.             UWORD                     MsgCode;
  379.             struct Gadget            *MsgGadget;
  380.  
  381.             struct PatternNode        *Selected = NULL;
  382.             LONG                     Offset = -1;
  383.  
  384.             UBYTE                     DummyBuffer[MAX_FILENAME_LENGTH];
  385.             struct FileRequester    *FileRequest;
  386.             LONG                     Error;
  387.  
  388.             GuideContext(CONTEXT_AREA_CODES);
  389.  
  390.             PushWindow(LocalWindow);
  391.  
  392.             do
  393.             {
  394.                 if(Wait(PORTMASK(LocalWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  395.                     break;
  396.  
  397.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  398.                 {
  399.                     MsgClass        = Message->Class;
  400.                     MsgCode         = Message->Code;
  401.                     MsgGadget        = (struct Gadget *)Message->IAddress;
  402.  
  403.                     LT_ReplyIMsg(Message);
  404.  
  405.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  406.                     {
  407.                         if(MsgGadget->GadgetID == GAD_LIST)
  408.                         {
  409.                             if(Selected)
  410.                             {
  411.                                 strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  412.                                 strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  413.                             }
  414.  
  415.                             if(!Selected)
  416.                             {
  417.                                 if(Selected = (struct PatternNode *)GetListNode(MsgCode,(struct List *)PatternList))
  418.                                 {
  419.                                     Offset = MsgCode;
  420.  
  421.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  422.                                         GTST_String,    Selected->Comment,
  423.                                     TAG_DONE);
  424.  
  425.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  426.                                         GTST_String,    Selected->Pattern,
  427.                                     TAG_DONE);
  428.  
  429.                                     ChangeLocalState(Handle,PatternList,Selected);
  430.                                 }
  431.                             }
  432.  
  433.                             if(Selected && (&Selected->List != (struct MinList *)GetActivePattern()))
  434.                             {
  435.                                 LT_PressButton(Handle,GAD_EDIT);
  436.  
  437.                                 LT_LockWindow(LocalWindow);
  438.  
  439.                                 if(RatePanel(LocalWindow,GlobalPhoneHandle,NULL,(struct List *)&Selected->List))
  440.                                 {
  441.                                     Changed = TRUE;
  442.  
  443.                                     if(ChangedPtr)
  444.                                         *ChangedPtr = TRUE;
  445.                                 }
  446.  
  447.                                 LT_UnlockWindow(LocalWindow);
  448.                             }
  449.                         }
  450.                     }
  451.  
  452.                     if(MsgClass == IDCMP_GADGETUP)
  453.                     {
  454.                         switch(MsgGadget->GadgetID)
  455.                         {
  456.                             case GAD_CLOSE:
  457.                             case GAD_USE:
  458.  
  459.                                 if(Selected)
  460.                                 {
  461.                                     strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  462.                                     strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  463.                                 }
  464.  
  465.                                 Done = TRUE;
  466.                                 break;
  467.  
  468.                             case GAD_TOP:
  469.  
  470.                                 MoveListViewNode(Handle,PatternList,GAD_LIST,(struct Node *)Selected,&Offset,MOVE_HEAD);
  471.  
  472.                                 ChangeLocalState(Handle,PatternList,Selected);
  473.  
  474.                                 Changed = TRUE;
  475.  
  476.                                 if(ChangedPtr)
  477.                                     *ChangedPtr = TRUE;
  478.  
  479.                                 break;
  480.  
  481.                             case GAD_UP:
  482.  
  483.                                 MoveListViewNode(Handle,PatternList,GAD_LIST,(struct Node *)Selected,&Offset,MOVE_PRED);
  484.  
  485.                                 ChangeLocalState(Handle,PatternList,Selected);
  486.  
  487.                                 Changed = TRUE;
  488.  
  489.                                 if(ChangedPtr)
  490.                                     *ChangedPtr = TRUE;
  491.  
  492.                                 break;
  493.  
  494.                             case GAD_DOWN:
  495.  
  496.                                 MoveListViewNode(Handle,PatternList,GAD_LIST,(struct Node *)Selected,&Offset,MOVE_SUCC);
  497.  
  498.                                 ChangeLocalState(Handle,PatternList,Selected);
  499.  
  500.                                 Changed = TRUE;
  501.  
  502.                                 if(ChangedPtr)
  503.                                     *ChangedPtr = TRUE;
  504.  
  505.                                 break;
  506.  
  507.                             case GAD_END:
  508.  
  509.                                 MoveListViewNode(Handle,PatternList,GAD_LIST,(struct Node *)Selected,&Offset,MOVE_TAIL);
  510.  
  511.                                 ChangeLocalState(Handle,PatternList,Selected);
  512.  
  513.                                 Changed = TRUE;
  514.  
  515.                                 if(ChangedPtr)
  516.                                     *ChangedPtr = TRUE;
  517.  
  518.                                 break;
  519.  
  520.                             case GAD_NEW:
  521.  
  522.                                 if(Selected)
  523.                                 {
  524.                                     strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  525.                                     strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  526.                                 }
  527.  
  528.                                 if(Node = CreatePatternNode(""))
  529.                                 {
  530.                                     if(Selected)
  531.                                     {
  532.                                         strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  533.                                         strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  534.                                     }
  535.  
  536.                                     LT_SetAttributes(Handle,GAD_LIST,
  537.                                         GTLV_Labels,    ~0,
  538.                                     TAG_DONE);
  539.  
  540.                                     AddTail((struct List *)PatternList,(struct Node *)Node);
  541.  
  542.                                     LT_SetAttributes(Handle,GAD_LIST,
  543.                                         GTLV_Labels,    PatternList,
  544.                                         LALV_Selected,    ListCount++,
  545.                                     TAG_DONE);
  546.  
  547.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  548.                                         GTST_String,    "",
  549.                                     TAG_DONE);
  550.  
  551.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  552.                                         GTST_String,    "",
  553.                                     TAG_DONE);
  554.  
  555.                                     Selected = Node;
  556.                                     Offset = ListCount - 1;
  557.  
  558.                                     ChangeLocalState(Handle,PatternList,Selected);
  559.  
  560.                                     LT_Activate(Handle,GAD_COMMENT);
  561.  
  562.                                     Changed = TRUE;
  563.  
  564.                                     if(ChangedPtr)
  565.                                         *ChangedPtr = TRUE;
  566.                                 }
  567.                                 else
  568.                                     DisplayBeep(LocalWindow->WScreen);
  569.  
  570.                                 break;
  571.  
  572.                             case GAD_COPY:
  573.  
  574.                                 if(Node = CreatePatternNode(Selected->Comment))
  575.                                 {
  576.                                     struct TimeDateNode *OldNode,*NewNode;
  577.                                     BOOL AllFine;
  578.  
  579.                                     FreeList((struct List *)&Node->List);
  580.  
  581.                                     AllFine = TRUE;
  582.  
  583.                                     for(OldNode = (struct TimeDateNode *)Selected->List.mlh_Head ; OldNode->Node.ln_Succ ; OldNode = (struct TimeDateNode *)OldNode->Node.ln_Succ)
  584.                                     {
  585.                                         if(NewNode = CreateTimeDateNode(0,1,"",OldNode->Table[0].Count))
  586.                                         {
  587.                                             strcpy(NewNode->Node.ln_Name = NewNode->Buffer,OldNode->Buffer);
  588.  
  589.                                             NewNode->Header = OldNode->Header;
  590.  
  591.                                             CopyMem(OldNode->Table,NewNode->Table,sizeof(struct TimeDate) * OldNode->Table[0].Count);
  592.  
  593.                                             AdaptTimeDateNode(NewNode);
  594.  
  595.                                             AddTail((struct List *)&Node->List,(struct Node *)NewNode);
  596.                                         }
  597.                                         else
  598.                                         {
  599.                                             AllFine = FALSE;
  600.                                             break;
  601.                                         }
  602.                                     }
  603.  
  604.                                     if(!AllFine)
  605.                                     {
  606.                                         FreeList((struct List *)&Node->List);
  607.                                         FreeVecPooled(Node);
  608.                                         DisplayBeep(LocalWindow->WScreen);
  609.                                     }
  610.                                     else
  611.                                     {
  612.                                         if(Selected)
  613.                                         {
  614.                                             strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  615.                                             strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  616.                                         }
  617.  
  618.                                         LT_SetAttributes(Handle,GAD_LIST,
  619.                                             GTLV_Labels,    ~0,
  620.                                         TAG_DONE);
  621.  
  622.                                         AddTail((struct List *)PatternList,(struct Node *)Node);
  623.  
  624.                                         LT_SetAttributes(Handle,GAD_LIST,
  625.                                             GTLV_Labels,    PatternList,
  626.                                             LALV_Selected,    ListCount++,
  627.                                         TAG_DONE);
  628.  
  629.                                         strcpy(Node->Pattern,Selected->Pattern);
  630.                                         strcpy(Node->Comment,Selected->Comment);
  631.  
  632.                                         Selected = Node;
  633.                                         Offset = ListCount - 1;
  634.  
  635.                                         LT_SetAttributes(Handle,GAD_PATTERN,
  636.                                             GTST_String,    Selected->Pattern,
  637.                                         TAG_DONE);
  638.  
  639.                                         LT_SetAttributes(Handle,GAD_COMMENT,
  640.                                             GTST_String,    Selected->Comment,
  641.                                         TAG_DONE);
  642.  
  643.                                         ChangeLocalState(Handle,PatternList,Selected);
  644.  
  645.                                         LT_Activate(Handle,GAD_COMMENT);
  646.  
  647.                                         Changed = TRUE;
  648.  
  649.                                         if(ChangedPtr)
  650.                                             *ChangedPtr = TRUE;
  651.                                     }
  652.                                 }
  653.                                 else
  654.                                     DisplayBeep(LocalWindow->WScreen);
  655.  
  656.                                 break;
  657.  
  658.                             case GAD_DISCARD:
  659.  
  660.                                 LT_SetAttributes(Handle,GAD_LIST,
  661.                                     GTLV_Labels,    ~0,
  662.                                 TAG_DONE);
  663.  
  664.                                 FreePatternList(PatternList);
  665.  
  666.                                 Done = Changed = TRUE;
  667.  
  668.                                 if(ChangedPtr)
  669.                                     *ChangedPtr = FALSE;
  670.  
  671.                                 LastPattern[0] = 0;
  672.                                 strcpy(Config->AreaCodeFileName,LastPattern);
  673.  
  674.                                 break;
  675.  
  676.                             case GAD_CLEAR:
  677.  
  678.                                 LT_SetAttributes(Handle,GAD_LIST,
  679.                                     GTLV_Labels,    ~0,
  680.                                 TAG_DONE);
  681.  
  682.                                 FreePatternList(PatternList);
  683.                                 ListCount = 0;
  684.  
  685.                                 LT_SetAttributes(Handle,GAD_LIST,
  686.                                     GTLV_Labels,    PatternList,
  687.                                     LALV_Selected,    ~0,
  688.                                 TAG_DONE);
  689.  
  690.                                 Selected = NULL;
  691.                                 Offset = -1;
  692.  
  693.                                 ChangeLocalState(Handle,PatternList,Selected);
  694.  
  695.                                 Changed = TRUE;
  696.  
  697.                                 if(ChangedPtr)
  698.                                     *ChangedPtr = FALSE;
  699.  
  700.                                 break;
  701.  
  702.                             case GAD_EDIT:
  703.  
  704.                                 if(Selected)
  705.                                 {
  706.                                     LT_LockWindow(LocalWindow);
  707.  
  708.                                     if(RatePanel(LocalWindow,GlobalPhoneHandle,NULL,(struct List *)&Selected->List))
  709.                                     {
  710.                                         Changed = TRUE;
  711.  
  712.                                         if(ChangedPtr)
  713.                                             *ChangedPtr = TRUE;
  714.                                     }
  715.  
  716.                                     LT_UnlockWindow(LocalWindow);
  717.                                 }
  718.  
  719.                                 break;
  720.  
  721.                             case GAD_REMOVE:
  722.  
  723.                                 if(Selected)
  724.                                 {
  725.                                     LT_SetAttributes(Handle,GAD_LIST,
  726.                                         GTLV_Labels,    ~0,
  727.                                     TAG_DONE);
  728.  
  729.                                     Node = (struct PatternNode *)RemoveGetNext((struct Node *)Selected);
  730.                                     DeletePatternNode(Selected);
  731.  
  732.                                     LT_SetAttributes(Handle,GAD_LIST,
  733.                                         GTLV_Labels,    PatternList,
  734.                                         LALV_Selected,    Offset = GetNodeOffset((struct Node *)Node,(struct List *)PatternList),
  735.                                     TAG_DONE);
  736.  
  737.                                     Selected = Node;
  738.  
  739.                                     if(Selected)
  740.                                     {
  741.                                         LT_SetAttributes(Handle,GAD_PATTERN,
  742.                                             GTST_String,    Selected->Pattern,
  743.                                         TAG_DONE);
  744.  
  745.                                         LT_SetAttributes(Handle,GAD_COMMENT,
  746.                                             GTST_String,    Selected->Comment,
  747.                                         TAG_DONE);
  748.                                     }
  749.  
  750.                                     ChangeLocalState(Handle,PatternList,Selected);
  751.  
  752.                                     Changed = TRUE;
  753.  
  754.                                     if(ChangedPtr)
  755.                                         *ChangedPtr = TRUE;
  756.                                 }
  757.  
  758.                                 break;
  759.  
  760.                             case GAD_LIST:
  761.  
  762.                                 if(Selected)
  763.                                 {
  764.                                     strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  765.                                     strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  766.                                 }
  767.  
  768.                                 if(Selected = (struct PatternNode *)GetListNode(MsgCode,(struct List *)PatternList))
  769.                                 {
  770.                                     Offset = MsgCode;
  771.  
  772.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  773.                                         GTST_String,    Selected->Comment,
  774.                                     TAG_DONE);
  775.  
  776.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  777.                                         GTST_String,    Selected->Pattern,
  778.                                     TAG_DONE);
  779.  
  780.                                     ChangeLocalState(Handle,PatternList,Selected);
  781.                                 }
  782.  
  783.                                 break;
  784.  
  785.                             case GAD_COMMENT:
  786.  
  787.                                 if(Selected)
  788.                                 {
  789.                                     LT_SetAttributes(Handle,GAD_LIST,
  790.                                         GTLV_Labels,    ~0,
  791.                                     TAG_DONE);
  792.  
  793.                                     strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  794.  
  795.                                     LT_SetAttributes(Handle,GAD_LIST,
  796.                                         GTLV_Labels,    PatternList,
  797.                                         LALV_Selected,    GetNodeOffset((struct Node *)Selected,(struct List *)PatternList),
  798.                                     TAG_DONE);
  799.  
  800.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  801.                                         GTST_String,    Selected->Pattern,
  802.                                     TAG_DONE);
  803.  
  804.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  805.                                         GTST_String,    Selected->Comment,
  806.                                     TAG_DONE);
  807.  
  808.                                     Changed = TRUE;
  809.  
  810.                                     if(ChangedPtr)
  811.                                         *ChangedPtr = TRUE;
  812.  
  813.                                     LT_Activate(Handle,GAD_PATTERN);
  814.                                 }
  815.  
  816.                                 break;
  817.  
  818.                             case GAD_PATTERN:
  819.  
  820.                                 if(Selected)
  821.                                 {
  822.                                     strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  823.  
  824.                                     Changed = TRUE;
  825.  
  826.                                     if(ChangedPtr)
  827.                                         *ChangedPtr = TRUE;
  828.                                 }
  829.  
  830.                                 break;
  831.  
  832.                             case GAD_LOAD:
  833.  
  834.                                 LT_LockWindow(LocalWindow);
  835.  
  836.                                 strcpy(DummyBuffer,LastPattern);
  837.  
  838.                                 if(FileRequest = OpenSingleFile(LocalWindow,LocaleString(MSG_AREACODE_LOAD_GROUP_SETTINGS_TXT),NULL,"#?.prefs",DummyBuffer,sizeof(DummyBuffer)))
  839.                                 {
  840.                                     struct List *SomeList;
  841.  
  842.                                     FreeAslRequest(FileRequest);
  843.  
  844.                                     LT_SetAttributes(Handle,GAD_LIST,
  845.                                         GTLV_Labels,    ~0,
  846.                                     TAG_DONE);
  847.  
  848.                                     Selected = NULL;
  849.                                     Offset = -1;
  850.  
  851.                                     if(!(SomeList = LoadTimeDateList(DummyBuffer,&Error)))
  852.                                         ShowError(LocalWindow,ERR_LOAD_ERROR,Error,DummyBuffer);
  853.                                     else
  854.                                     {
  855.                                         FreePatternList(PatternList);
  856.  
  857.                                         MoveList(SomeList,PatternList);
  858.                                         FreeVecPooled(SomeList);
  859.  
  860.                                         strcpy(LastPattern,DummyBuffer);
  861.                                         strcpy(Config->AreaCodeFileName,LastPattern);
  862.  
  863.                                         Changed = FALSE;
  864.  
  865.                                         if(ChangedPtr)
  866.                                             *ChangedPtr = FALSE;
  867.  
  868.                                         ListCount = GetListSize(PatternList);
  869.                                     }
  870.  
  871.                                     LT_SetAttributes(Handle,GAD_LIST,
  872.                                         GTLV_Labels,    PatternList,
  873.                                         LALV_Selected,    ~0,
  874.                                     TAG_DONE);
  875.  
  876.                                     ChangeLocalState(Handle,PatternList,Selected);
  877.                                 }
  878.  
  879.                                 LT_UnlockWindow(LocalWindow);
  880.  
  881.                                 break;
  882.  
  883.                             case GAD_SAVE:
  884.  
  885.                                 if(Selected)
  886.                                 {
  887.                                     strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  888.                                     strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  889.                                 }
  890.  
  891.                                 LT_LockWindow(LocalWindow);
  892.  
  893.                                 strcpy(DummyBuffer,LastPattern);
  894.  
  895.                                 if(FileRequest = SaveFile(LocalWindow,LocaleString(MSG_AREACODE_SAVE_GROUP_SETTINGS_TXT),NULL,"#?.prefs",DummyBuffer,sizeof(DummyBuffer)))
  896.                                 {
  897.                                     FreeAslRequest(FileRequest);
  898.  
  899.                                     if(!SaveTimeDateList(DummyBuffer,PatternList,&Error))
  900.                                         ShowError(LocalWindow,ERR_SAVE_ERROR,Error,DummyBuffer);
  901.                                     else
  902.                                     {
  903.                                         strcpy(LastPattern,DummyBuffer);
  904.  
  905.                                         strcpy(Config->AreaCodeFileName,LastPattern);
  906.  
  907.                                         if(ChangedPtr)
  908.                                             *ChangedPtr = FALSE;
  909.                                     }
  910.                                 }
  911.  
  912.                                 LT_UnlockWindow(LocalWindow);
  913.  
  914.                                 break;
  915.                         }
  916.                     }
  917.                 }
  918.             }
  919.             while(!Done);
  920.  
  921.             PopWindow();
  922.         }
  923.  
  924.         LT_DeleteHandle(Handle);
  925.     }
  926.  
  927.     return(Changed);
  928. }
  929.